using System;
using System.Data;
using System.Configuration;
using System.Web.UI;
using SystemFrameworks;
using Anthem;
using BusinessRules;
using Common;
using DataAccess;
using System.Web.UI.WebControls;

public partial class Perfiles : PageBase
{
    #region Propiedades

    public string IdentificadorPerId
    {
        get { return (ViewState["IdentificadorPerId"] == null ? string.Empty : ViewState["IdentificadorPerId"].ToString()); }
        set { ViewState["IdentificadorPerId"] = value; }
    }

    #endregion

    #region Page_Load

    protected void Page_Load(object sender, EventArgs e)
    {
        WccAcciones1.AddEnabledDuringCallBack = false;
        WccAcciones1.AddTextDuringCallBack = "Guardando... Por favor esperar!!!";
        WccAcciones1.UpdateEnabledDuringCallBack = false;
        WccAcciones1.UpdateTextDuringCallBack = "Guardando... Por favor espere!!!";

        lblMensaje.Visible = false;
        if (Manager.IsCallBack)
        {
            Manager.RegisterClientScriptBlock(typeof(Page), "reloj", "<script>muestraReloj2();</script>");
        }
        WccAcciones1.Permisos = Permisos;
        WccAcciones1.Permisos = Permisos;
        if (!Page.IsPostBack)
        {
            BuscarPlanesProgramasDisponibles();
            BuscarRubrosDisponibles();
            TraerContextItems();
            if (IdentificadorPerId != "")
            {
                cargarCampos();
                WccAcciones1.Accion = Utilidad.Acciones.Actualizar;
                WccAcciones1.AddVisible = false;
                WccAcciones1.UpdateVisible = true;
                WccAcciones1.DeleteVisible = true;

            }
            else
            {
                WccAcciones1.Accion = Utilidad.Acciones.Adicionar;
            }
        }
    }

    #endregion

    #region TraerContextItems

    private void TraerContextItems()
    {
        if (Context.Items["IdentificadorPerId"] != null)
            IdentificadorPerId = Context.Items["IdentificadorPerId"].ToString();
    }

    #endregion

    #region cargarCampos

    private void cargarCampos()
    {
        BusinessRules.Perfiles objBR = new BusinessRules.Perfiles(ConfigurationManager.AppSettings["Conn"]);
        AdmPerfilesData objAdmPerfilesData = objBR.ConsultarPerfil(Convert.ToInt32(IdentificadorPerId));
        try
        {
            if (objAdmPerfilesData != null)
            {
                DataRow objRow = objAdmPerfilesData.Rows[0];
                //dlpTipoUsuario.Seleccionar(objRow[Adm_UsuariosData.USU_TIPO_FIELD].ToString());
                txtNombre.Text = objRow[AdmPerfilesData.PER_NOMBRE_FIELD].ToString();
                txtDescripcion.Text = objRow[AdmPerfilesData.PER_DESCRIPCION_FIELD].ToString();
                dlpEstadoUsuario.SelectedValue = objRow[AdmPerfilesData.PER_ESTADO_FIELD].ToString();
                if (objRow[AdmPerfilesData.PER_FECHA_CREACION_FIELD] != DBNull.Value)
                    calFechaCreacion.SelectedDate = Convert.ToDateTime(objRow[AdmPerfilesData.PER_FECHA_CREACION_FIELD]);
                if (objRow[AdmPerfilesData.PER_FECHA_ACTUALIZACION_FIELD] != DBNull.Value)
                    calFechaActualizacion.SelectedDate = Convert.ToDateTime(objRow[AdmPerfilesData.PER_FECHA_ACTUALIZACION_FIELD]);
                
                //cargar Planes y programas Asociados
                #region Planes y programas Asociados
                BuscarAsignados();


                #endregion
                //cargar planes de accion asociados (Rubros)
                #region Planes y programas Asociados

                BuscarRubrosAsignados();

                #endregion
            }
        }
        catch (Exception ex)
        {
            lblMensaje.Visible = true;
            lblMensaje.Text = ex.Message;
        }
    }

    #endregion

    #region BuscarRubrosAsignados

    private void BuscarRubrosAsignados()
    {
        lblMensaje.Visible = true;

        try
        {
            ListBoxRubrosAsignados.Items.Clear();

            SigPlanAccionAdmPerfiles objSigPlanAccionAdmPerfiles = new SigPlanAccionAdmPerfiles(ConfigurationManager.AppSettings["Conn"]);

            SigPlanAccionAdmPerfilesData objSigPlanAccionAdmPerfilesData = objSigPlanAccionAdmPerfiles.ConsultarSigPlanAccionAdmPerfilesPerId(IdentificadorPerId);

            if (objSigPlanAccionAdmPerfilesData != null && objSigPlanAccionAdmPerfilesData.Rows.Count != 0)
            {
                DataView oView = new DataView(objSigPlanAccionAdmPerfilesData);
                ListBoxRubrosAsignados.DataSource = oView;
                ListBoxRubrosAsignados.DataTextField = SigPlanAccionAdmPerfilesData.PLN_NOMBRE_FIELD;
                ListBoxRubrosAsignados.DataValueField = SigPlanAccionAdmPerfilesData.PLN_ID_FIELD;
                ListBoxRubrosAsignados.DataBind();

            }

            //ListBoxEntidadesDisponibles.Items.Clear();


            //ELIMINAR los items seleccionados del list Dsiponibles
            ListItemCollection objItems = new ListItemCollection();
            foreach (ListItem objItem in ListBoxRubrosAsignados.Items)
            {
                objItems.Add(objItem);
            }

            foreach (ListItem objItem in objItems)
            {
                ListBoxRubrosDisponibles.Items.Remove(objItem);
            }

        }
        catch (ApplicationExceptionManager objEx)
        {
            //ExceptionManager.Publish(objEx);
            lblMensaje.CssClass = "error";
            lblMensaje.Text = objEx.Message + Utilidad.TraerMensaje("gmsgErrorGeneral");
        }
    }

    #endregion

    #region BuscarAsignados

    private void BuscarAsignados()
    {
        lblMensaje.Visible = true;

        try
        {
            ListBoxEntidadesAsignadas.Items.Clear();

            SigPlanProgramaAdmPerfiles objSigPlanProgramaAdmPerfiles = new SigPlanProgramaAdmPerfiles(ConfigurationManager.AppSettings["Conn"]);

            SigPlanProgramaAdmPerfilesData objSigPlanProgramaAdmPerfilesData = objSigPlanProgramaAdmPerfiles.ConsultarSigPlanProgramaAdmPerfilesPerId(IdentificadorPerId);

            if (objSigPlanProgramaAdmPerfilesData != null && objSigPlanProgramaAdmPerfilesData.Rows.Count != 0)
            {

                DataView oView = new DataView(objSigPlanProgramaAdmPerfilesData);
                ListBoxEntidadesAsignadas.DataSource = oView;

                ListBoxEntidadesAsignadas.DataTextField = SigPlanProgramaAdmPerfilesData.PRG_NOMBRE_FIELD;
                ListBoxEntidadesAsignadas.DataValueField = SigPlanProgramaAdmPerfilesData.PRG_ID_FIELD;
                ListBoxEntidadesAsignadas.DataBind();

            }

            //ListBoxEntidadesDisponibles.Items.Clear();


            //ELIMINAR los items seleccionados del list Dsiponibles
            ListItemCollection objItems = new ListItemCollection();
            foreach (ListItem objItem in ListBoxEntidadesAsignadas.Items)
            {
                objItems.Add(objItem);
            }

            foreach (ListItem objItem in objItems)
            {
                ListBoxEntidadesDisponibles.Items.Remove(objItem);
            }

        }
        catch (ApplicationExceptionManager objEx)
        {
            //ExceptionManager.Publish(objEx);
            lblMensaje.CssClass = "error";
            lblMensaje.Text = objEx.Message + Utilidad.TraerMensaje("gmsgErrorGeneral");
        }
    }

    #endregion

    #region BuscarPlanesProgramasDisponibles

    private void BuscarPlanesProgramasDisponibles()
    {
        lblMensaje.Visible = true;
        try
        {
            ListBoxEntidadesDisponibles.Items.Clear();

            BusinessRules.SigPlanPrograma objSigPlanPrograma = new BusinessRules.SigPlanPrograma(ConfigurationManager.AppSettings["Conn"]);
            SigPlanProgramaData objDt = objSigPlanPrograma.BuscarPlanPrograma();

            if (null != objDt)
            {
                DataView oView = new DataView(objDt);

                ListBoxEntidadesDisponibles.DataSource = oView;
                ListBoxEntidadesDisponibles.DataTextField = SigPlanProgramaData.PRG_NOMBRE_FIELD;
                ListBoxEntidadesDisponibles.DataValueField = SigPlanProgramaData.PRG_ID_FIELD;

                ListBoxEntidadesDisponibles.DataBind();
            }
        }
        catch (ApplicationExceptionManager)
        {
            //ExceptionManager.Publish(objEx);
            lblMensaje.CssClass = "error";
            lblMensaje.Text = Utilidad.TraerMensaje("gmsgErrorGeneral");
        }
    }

    #endregion

    #region BuscarRubrosDisponibles

    private void BuscarRubrosDisponibles()
    {
        lblMensaje.Visible = true;
        try
        {
            ListBoxRubrosDisponibles.Items.Clear();

            SigPlanAccion objSigPlanAccion = new SigPlanAccion(ConfigurationManager.AppSettings["Conn"]);
            SigPlanAccionData objDt = objSigPlanAccion.BuscarPlanAccion();

            if (null != objDt)
            {
                DataView oView = new DataView(objDt);
                ListBoxRubrosDisponibles.DataSource = oView;
                ListBoxRubrosDisponibles.DataTextField = SigPlanAccionData.PLN_NOMBRE_FIELD;
                ListBoxRubrosDisponibles.DataValueField = SigPlanAccionData.PLN_ID_FIELD;
                ListBoxRubrosDisponibles.DataBind();   
            }
        }
        catch (ApplicationExceptionManager)
        {
            //ExceptionManager.Publish(objEx);
            lblMensaje.CssClass = "error";
            lblMensaje.Text = Utilidad.TraerMensaje("gmsgErrorGeneral");
        }
    }

    #endregion

    #region btnRegresar_Click

    protected void btnRegresar_Click(object sender, ImageClickEventArgs e)
    {
        Server.Transfer("PerfilesListado.aspx", true);
    }

    #endregion

    #region WccAcciones1_Add_OnClick

    protected void WccAcciones1_Add_OnClick(object sender, ImageClickEventArgs e)
    {
        //agregar el perfil y proyectos relacionados
        AdmPerfilesData objDS = new AdmPerfilesData();
        SigPlanProgramaAdmPerfilesData objSigPlanProgramaAdmPerfilesData = new SigPlanProgramaAdmPerfilesData();
        SigPlanAccionAdmPerfilesData objSigPlanAccionAdmPerfilesData = new SigPlanAccionAdmPerfilesData();

        try
        {
            DataRow objRow = objDS.NewRow();
            objRow[AdmPerfilesData.PER_NOMBRE_FIELD] = txtNombre.Text.Trim();
            objRow[AdmPerfilesData.PER_DESCRIPCION_FIELD] = txtDescripcion.Text;
            objRow[AdmPerfilesData.PER_ESTADO_FIELD] = dlpEstadoUsuario.SelectedValue;
            objDS.Add(objRow);
            lblMensaje.Visible = true;
            BusinessRules.Perfiles objBR = new BusinessRules.Perfiles(ConfigurationManager.AppSettings["Conn"]);
            foreach (ListItem objItem in ListBoxEntidadesAsignadas.Items)
            {
                DataRow filaRelacioandas = objSigPlanProgramaAdmPerfilesData.NewRow();
                filaRelacioandas[SigPlanProgramaAdmPerfilesData.PRG_ID_FIELD] = objItem.Value;
                objSigPlanProgramaAdmPerfilesData.Add(filaRelacioandas);
            }
            foreach (ListItem objItem in ListBoxRubrosAsignados.Items)
            {
                DataRow filaRelacioandas = objSigPlanAccionAdmPerfilesData.NewRow();
                filaRelacioandas[SigPlanAccionAdmPerfilesData.PLN_ID_FIELD] = objItem.Value;
                objSigPlanAccionAdmPerfilesData.Add(filaRelacioandas);
            }



            IdentificadorPerId = objBR.AdicionarPerfilContransacciones(objDS, objSigPlanProgramaAdmPerfilesData, objSigPlanAccionAdmPerfilesData).ToString();
            lblMensaje.CssClass = "mensaje";
            lblMensaje.Visible = true;
            lblMensaje.Text = Utilidad.TraerMensaje("gmsgExitoGuardar");
            WccAcciones1.Accion = Utilidad.Acciones.Actualizar;
            WccAcciones1.AddVisible = false;
            WccAcciones1.UpdateVisible = true;
            WccAcciones1.DeleteVisible = true;
        }
        catch (Exception objEx)
        {
            lblMensaje.CssClass = "error";
            lblMensaje.Visible = true;
            lblMensaje.Text = Utilidad.TraerMensaje("gmsgErrorGeneral");
            //ExceptionManager.Publish(objEx);
        }
    }

    #endregion

    #region WccAcciones1_Delete_OnClick

    protected void WccAcciones1_Delete_OnClick(object sender, ImageClickEventArgs e)
    {
        try
        {
            string[] strIDs = new string[1];
            strIDs[0] = IdentificadorPerId;
            BusinessRules.Perfiles objPerfiles = new BusinessRules.Perfiles(ConfigurationManager.AppSettings["Conn"]);
            if (objPerfiles.EliminarPerfilContransacciones(strIDs) != 0)
            {
                LimpiarCamposPagina();
                WccAcciones1.Accion = Utilidad.Acciones.Adicionar;
                WccAcciones1.AddVisible = true;
                WccAcciones1.UpdateVisible = false;
                WccAcciones1.DeleteVisible = false;
                lblMensaje.Visible = true;
                Utilidad.mostrarMensaje(Utilidad.TiposMensajes.Mensaje, Utilidad.TraerMensaje("gmsgEliminarRegistrosExitoso"), lblMensaje);
            }
        }

        catch (Exception ex)
        {
            lblMensaje.CssClass = "error";
            lblMensaje.Visible = true;
            lblMensaje.Text = Utilidad.TraerMensaje("gmsgErrorGeneral");
        }


    }

    #endregion

    #region LimpiarCamposPagina

    private void LimpiarCamposPagina()
    {
        txtNombre.Text = "";
        txtNombre.AutoUpdateAfterCallBack = true;
        txtDescripcion.Text = "";
        txtDescripcion.AutoUpdateAfterCallBack = true;
        ListBoxEntidadesAsignadas.Items.Clear();
        ListBoxEntidadesAsignadas.AutoUpdateAfterCallBack = true;
        BuscarPlanesProgramasDisponibles();
        ListBoxEntidadesDisponibles.AutoUpdateAfterCallBack = true;

        ListBoxRubrosAsignados.Items.Clear();
        ListBoxRubrosAsignados.AutoUpdateAfterCallBack = true;
        BuscarRubrosDisponibles();
        ListBoxRubrosDisponibles.AutoUpdateAfterCallBack = true;
    }

    #endregion

    #region WccAcciones1_Update_OnClick

    protected void WccAcciones1_Update_OnClick(object sender, ImageClickEventArgs e)
    {
        //agregar el perfil y proyectos relacionados
        AdmPerfilesData objDS = new AdmPerfilesData();
        SigPlanProgramaAdmPerfilesData objSigPlanProgramaAdmPerfilesData = new SigPlanProgramaAdmPerfilesData();
        SigPlanAccionAdmPerfilesData objSigPlanAccionAdmPerfilesData = new SigPlanAccionAdmPerfilesData();

        try
        {
            DataRow objRow = objDS.NewRow();
            objRow[AdmPerfilesData.PER_ID_FIELD] = IdentificadorPerId;
            objRow[AdmPerfilesData.PER_NOMBRE_FIELD] = txtNombre.Text.Trim();
            objRow[AdmPerfilesData.PER_DESCRIPCION_FIELD] = txtDescripcion.Text;
            objRow[AdmPerfilesData.PER_ESTADO_FIELD] = dlpEstadoUsuario.SelectedValue;
            objDS.Add(objRow);
            lblMensaje.Visible = true;

            BusinessRules.Perfiles objBR = new BusinessRules.Perfiles(ConfigurationManager.AppSettings["Conn"]);
            foreach (ListItem objItem in ListBoxEntidadesAsignadas.Items)
            {
                DataRow filaRelacioandas = objSigPlanProgramaAdmPerfilesData.NewRow();
                filaRelacioandas[SigPlanProgramaAdmPerfilesData.PRG_ID_FIELD] = objItem.Value;
                objSigPlanProgramaAdmPerfilesData.Add(filaRelacioandas);
            }

            
            foreach (ListItem objItem in ListBoxRubrosAsignados.Items)
            {
                DataRow filaRelacioandas = objSigPlanAccionAdmPerfilesData.NewRow();
                filaRelacioandas[SigPlanAccionAdmPerfilesData.PLN_ID_FIELD] = objItem.Value;
                objSigPlanAccionAdmPerfilesData.Add(filaRelacioandas);
            }


            IdentificadorPerId = objBR.ActualizarPerfilContransacciones(objDS, objSigPlanProgramaAdmPerfilesData, objSigPlanAccionAdmPerfilesData).ToString();
            lblMensaje.CssClass = "mensaje";
            lblMensaje.Visible = true;
            lblMensaje.Text = Utilidad.TraerMensaje("gmsgExitoGuardar");
            WccAcciones1.Accion = Utilidad.Acciones.Actualizar;
            WccAcciones1.AddVisible = false;
            WccAcciones1.UpdateVisible = true;
            WccAcciones1.DeleteVisible = true;
        }
        catch (Exception objEx)
        {
            lblMensaje.CssClass = "error";
            lblMensaje.Visible = true;
            lblMensaje.Text = Utilidad.TraerMensaje("gmsgErrorGeneral");
            //ExceptionManager.Publish(objEx);
        }

    }

    #endregion

    #region btnAdd_Click

    protected void btnAdd_Click(object sender, ImageClickEventArgs e)
    {
        ListItemCollection objItems = new ListItemCollection();

        foreach (ListItem objItem in ListBoxEntidadesDisponibles.Items)
        {
            if (objItem.Selected)
                objItems.Add(objItem);
        }

        foreach (ListItem objItem in objItems)
        {
            ListBoxEntidadesDisponibles.Items.Remove(objItem);
            ListBoxEntidadesAsignadas.Items.Add(objItem);
        }
    }

    #endregion

    #region btnAddAll_Click

    protected void btnAddAll_Click(object sender, ImageClickEventArgs e)
    {
        ListItemCollection objItems = new ListItemCollection();

        foreach (ListItem objItem in ListBoxEntidadesDisponibles.Items)
        {
            objItems.Add(objItem);
        }

        foreach (ListItem objItem in objItems)
        {
            ListBoxEntidadesDisponibles.Items.Remove(objItem);
            ListBoxEntidadesAsignadas.Items.Add(objItem);
        }
    }

    #endregion

    #region btnRemoveAll_Click

    protected void btnRemoveAll_Click(object sender, ImageClickEventArgs e)
    {
        ListItemCollection objItems = new ListItemCollection();

        foreach (ListItem objItem in ListBoxEntidadesAsignadas.Items)
        {
            objItems.Add(objItem);
        }

        foreach (ListItem objItem in objItems)
        {
            ListBoxEntidadesAsignadas.Items.Remove(objItem);
            ListBoxEntidadesDisponibles.Items.Add(objItem);
        }
    }

    #endregion

    #region btnRemove_Click

    protected void btnRemove_Click(object sender, ImageClickEventArgs e)
    {
        ListItemCollection objItems = new ListItemCollection();

        foreach (ListItem objItem in ListBoxEntidadesAsignadas.Items)
        {
            if (objItem.Selected)
                objItems.Add(objItem);
        }

        foreach (ListItem objItem in objItems)
        {
            ListBoxEntidadesAsignadas.Items.Remove(objItem);
            ListBoxEntidadesDisponibles.Items.Add(objItem);
        }
    }

    #endregion

    #region btnRubrosAdd_Click

    protected void btnRubrosAdd_Click(object sender, ImageClickEventArgs e)
    {
        ListItemCollection objItems = new ListItemCollection();

        foreach (ListItem objItem in ListBoxRubrosDisponibles.Items)
        {
            if (objItem.Selected)
                objItems.Add(objItem);
        }

        foreach (ListItem objItem in objItems)
        {
            ListBoxRubrosDisponibles.Items.Remove(objItem);
            ListBoxRubrosAsignados.Items.Add(objItem);
        }
    }

    #endregion

    #region btnRubrosAddAll_Click

    protected void btnRubrosAddAll_Click(object sender, ImageClickEventArgs e)
    {
        ListItemCollection objItems = new ListItemCollection();

        foreach (ListItem objItem in ListBoxRubrosDisponibles.Items)
        {
            objItems.Add(objItem);
        }

        foreach (ListItem objItem in objItems)
        {
            ListBoxRubrosDisponibles.Items.Remove(objItem);
            ListBoxRubrosAsignados.Items.Add(objItem);
        }
    }

    #endregion

    #region btnRubrosRemoveAll_Click

    protected void btnRubrosRemoveAll_Click(object sender, ImageClickEventArgs e)
    {
        ListItemCollection objItems = new ListItemCollection();

        foreach (ListItem objItem in ListBoxRubrosAsignados.Items)
        {
            objItems.Add(objItem);
        }

        foreach (ListItem objItem in objItems)
        {
            ListBoxRubrosAsignados.Items.Remove(objItem);
            ListBoxRubrosDisponibles.Items.Add(objItem);

        }
    }

    #endregion

    #region btnRubrosRemove_Click

    protected void btnRubrosRemove_Click(object sender, ImageClickEventArgs e)
    {
        ListItemCollection objItems = new ListItemCollection();

        foreach (ListItem objItem in ListBoxRubrosAsignados.Items)
        {
            if (objItem.Selected)
                objItems.Add(objItem);
        }

        foreach (ListItem objItem in objItems)
        {
            ListBoxRubrosAsignados.Items.Remove(objItem);
            ListBoxRubrosDisponibles.Items.Add(objItem);
        }
    }

    #endregion

}
